﻿using System;
using System.Collections.Generic;
using System.Text;


namespace Csharpzuoye
{
    //添加一个新类ContentService，其中有一个发布（Release()）方法： 发布的内容content有三种 在对象上操作helpmoney

    //1.如果发布Article，需要Article作者消耗一个帮帮币
    //2.如果发布Problem，需要消耗Problem作者其设置悬赏数量的帮帮币
    //3.如果发布Suggest，不需要消耗帮帮币
    //最后将内容存到数据库中，三个类存数据库的方法是完全一样的，现在用Console.WriteLine("saved into db")代替。 

    //异常
    //2.内容（Content）发布（Publish）的时候检查其作者（Author）是否为空，如果为空抛出“参数为空”异常
    //3在ContentService中捕获异常
    //    如果是“参数为空”异常，Console.WriteLine() 输出：内容的作者不能为空，将当前异常封装进新异常的InnerException，再将新异常抛出
    //    如果是“”参数越界”异常，Console.WriteLine() 输出：求助的Reward为负数（-XX），不再抛出异常
    //4.ContentService中无论是否捕获异常，均要Console.WriteLine() 输出：XXXX年XX月XX日 XX点XX分XX秒（当前时间），请求发布内容（Id=XXX）
    //    在Main()函数调用ContentService时，捕获一切异常，并记录异常的消息和堆栈信息
    public class ContentService
    {
        public int coin;
        public Content Author { get; set; }
        public virtual void Publish(Content content)//方法的参数类型是自定义的类，content是参数
        {
            try
            {
                content.Publish();
            }
            catch (ArgumentNullException e)
            {
                Console.WriteLine($"XXXX年XX月XX日 XX点XX分XX秒（当前时间），请求发布内容（Id=XXX）内容的作者不能为空{e.ToString()}");
                throw new Exception("内容的作者不能为空",e);
            }
            catch (ArgumentOutOfRangeException)
            {
                Console.WriteLine("XXXX年XX月XX日 XX点XX分XX秒（当前时间），请求发布内容（Id=XXX）求助的Reward为负数(-XX)");
            }
            finally
            {
                Console.WriteLine("XXXX年XX月XX日 XX点XX分XX秒（当前时间），请求发布内容（Id=XXX）");
            }
        }
    }

}
